This is a document where we do a “deep dive” on the “Overparenting” scale, which is one of the scales we are least able to predict movement in after the Disease Risk intervention - and a case that we think might be involved meaningful interactions with other scales (e.g., Disease Severity, Medical Skepticism).

Reliability

Let’s look at the observed reliability of the Overparenting scale at pre-test:


Reliability analysis   
Call: alpha(x = .)

  raw_alpha std.alpha G6(smc) average_r S/N  ase   mean sd median_r
      0.71      0.71    0.71      0.33 2.5 0.02 -0.016  1     0.31

 lower alpha upper     95% confidence boundaries
0.67 0.71 0.75 

 Reliability if an item is dropped:
           raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
overpar_1       0.66      0.66    0.63      0.33 2.0    0.025 0.014  0.31
overpar_2       0.64      0.63    0.60      0.30 1.7    0.026 0.022  0.29
overpar_3       0.61      0.62    0.59      0.29 1.6    0.029 0.023  0.24
overpar_4r      0.73      0.73    0.70      0.41 2.7    0.019 0.019  0.46
overpar_5r      0.67      0.68    0.65      0.35 2.1    0.024 0.035  0.36

 Item statistics 
             n raw.r std.r r.cor r.drop   mean  sd
overpar_1  493  0.68  0.69  0.60   0.48  0.728 1.4
overpar_2  493  0.73  0.74  0.67   0.56  0.998 1.3
overpar_3  493  0.79  0.77  0.70   0.59 -0.041 1.8
overpar_4r 493  0.56  0.56  0.37   0.31 -0.434 1.5
overpar_5r 493  0.66  0.66  0.53   0.45 -1.333 1.5

Non missing response frequency for each item
             -3   -2   -1    0    1    2    3 miss
overpar_1  0.01 0.05 0.12 0.21 0.32 0.18 0.10    0
overpar_2  0.01 0.04 0.07 0.21 0.30 0.23 0.14    0
overpar_3  0.07 0.17 0.24 0.13 0.15 0.15 0.10    0
overpar_4r 0.05 0.19 0.29 0.22 0.12 0.08 0.04    0
overpar_5r 0.23 0.29 0.25 0.12 0.05 0.04 0.02    0

Not spectacular, but there don’t appear to be items that would dramatically improve it.

Let’s look at the observed reliability of the Overparenting scale at post-test:


Reliability analysis   
Call: alpha(x = .)

  raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
      0.76      0.76    0.75      0.39 3.2 0.017 0.11 1.1     0.37

 lower alpha upper     95% confidence boundaries
0.73 0.76 0.8 

 Reliability if an item is dropped:
           raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
overpar_1       0.72      0.72    0.69      0.39 2.5    0.021 0.0143  0.37
overpar_2       0.71      0.71    0.67      0.38 2.5    0.021 0.0089  0.37
overpar_3       0.69      0.69    0.66      0.36 2.3    0.023 0.0156  0.30
overpar_4r      0.75      0.75    0.71      0.43 3.0    0.018 0.0129  0.45
overpar_5r      0.73      0.73    0.69      0.40 2.7    0.020 0.0178  0.39

 Item statistics 
             n raw.r std.r r.cor r.drop  mean  sd
overpar_1  493  0.71  0.73  0.63   0.54  0.75 1.4
overpar_2  493  0.73  0.73  0.66   0.56  1.01 1.5
overpar_3  493  0.79  0.77  0.69   0.60  0.23 1.8
overpar_4r 493  0.65  0.65  0.52   0.45 -0.31 1.5
overpar_5r 493  0.71  0.70  0.60   0.51 -1.12 1.5

Non missing response frequency for each item
             -3   -2   -1    0    1    2    3 miss
overpar_1  0.02 0.03 0.15 0.17 0.33 0.21 0.09    0
overpar_2  0.01 0.05 0.10 0.15 0.27 0.26 0.16    0
overpar_3  0.06 0.11 0.23 0.12 0.18 0.18 0.11    0
overpar_4r 0.05 0.15 0.31 0.20 0.13 0.11 0.04    0
overpar_5r 0.19 0.26 0.28 0.11 0.07 0.05 0.03    0

Again, not spectacular, though perhaps slightly better than at pre-test; no obvious items that should be dropped.

It’s possible that the lower-than-average reliability for this scale is one of the reasons it’s harder to predict - it’s the lowest reliability of all 14 scales at both pre- and post-test (though not dramatically lower than the Disease Rarity scale at pre-test, \(\alpha\) = 0.75, or the Naturalism scale at post-test, \(\alpha\) = 0.76).

Distributions of scores

Let’s look at the overall distribution of scores on the Overparenting scale, by condition and phase:

And at the difference scores:

Looks like mean scores were around the midpoint (0) at pre-test in both conditions, and increased at post-test among participants in the Disease Risk condition (but not the No Intervention condition). This increase in the Disease Risk condition seems to be on the order of 0.25 pts on our 7-point scale.

Correlations with other scales

Let’s look at the observed correlations between the Overparenting scale and other scales:

Joining, by = c("scaleA", "scaleB")
Joining, by = c("scaleA", "scaleB")
Joining, by = c("scaleA", "scaleB")

Joining, by = c("scaleA", "scaleB")
Joining, by = c("scaleA", "scaleB")
Joining, by = c("scaleA", "scaleB")

At pre-test, none of the other scales was strongy correlated with Overparenting among participants in either condition; the strongest were the two infant immune system beliefs scales (IIS: Limited Capacity and IIS: Weak).

In the No Intevention condition, these correlations seem to have increased at post-test relative to pre-test; this didn’t happen in the Disease Risk condition. The correlation between Overparenting and Medical Skepticism also seems to have increased in this condition from pre- to post-test in the No Intervention condition.

In the Disease Risk condition, a handful of correlations seem to have decreased from pre- to post-test, most notably all the correlations with vaccine beliefs, as well as the correlation with Medical Skepticism. Meanwhile, a different set of correlations seem to have increased from pre- to post-test, including correlations with Disease Severity (the target of the intervention), Vaccine Intention (the outcome of interest), and Vaccine Efficacy.

So it seems like just filling out these scales twice might have made participants align their beliefs about infant immune systems with their attitudes toward protective parenting (at least in the No Intervention condition) - but in addition to this, the intervention might have changed the relationship between participants’ beliefs about vaccines and their attitudes toward protective partenting. In particular, at pre-test, participants who more strongly endorsed what we’re calling “overparenting” also tended to think vaccines were more dangerous, less effective, more of a strain on the infant immune system, and more likely to contain toxins, and were generally lower on our Vaccine Intent scale. But at post-test, these relationships no longer held - all of these correlations were pretty close to 0.

(Note that this way of thinking about things is at odds with our use of the same cognitive model connecting all of these beliefs - I need to think harder about this.)

Quantile splits

Let’s split people into groups by their scores on the Overparenting, Medical Skepticism, and Disease Severity scores, since these were possible interactions that we identified in person. (Note that we could also use our investigations of the changing correlations among scales to do further investigations like this…)

Overparenting and Disease Severity

What I had written down in our notes from our meeting on 2018-05-15 was that the Disease Risk intervention might be most effective for participants who were high in Overparenting and low or moderate on Disease Severity. This does seem to be the case - these are the top and middle rows for the right-most column.

Interestingly, this plot reveals that the intervention generally didn’t work for participants who started out as low in Overparenting (left-most column) - this is good to know… not sure yet what to make of it!

As we’d predict, the intervention didn’t do much for participants who started out as high in Disease Severity (bottom row).

Overparenting and Medical Skepticism

I also had written down in our notes that the Disease Risk intervention might be most effective for participants who were high in Overparenting and high in Medicial Skepticism. Again, this does seem to be the case - this would be the bottom right panel.

Note, however, that this might just be a main effect of Medical Skepticism: Participants who started out high in Medical Skepticism (bottom row) seem to have been particularly sensitive to the intervention, perhaps regardless of their Overparenting scores.

Interestingly, this plot reveals that the intervention generally didn’t work for participants who started out as low in Medical Skepticism (top row) - again, this is good to know, though again not sure yet what to make of it!

Modeling interactions via regression

Let’s model these potential interactions via regression. (Again, we could also do this for any of the additional relationships of interest revealed by the changes in correlations, above).

I started off with my go-to model of the intervention, score ~ phase * condition + (1|subject) (with phase and condition effect-coded), because it’s the one that always makes sense to me, but we should consider doing this with other models as well.

On the idea that we were interested in possible interactions involving Overparenting, Medicial Skepticism, and Disease Severity in particular, I created a new dataframe with pre-test scores for Overparenting, Medicial Skepticism, and Disease Severity (all mean-centered and standardized), and both pre- and post-test scores for Vaccine Intentions (also mean-centered and standardized). I think proceeded through a series of models of increasing complexity (though I know this isn’t a very sophisticated approach) - see the code for everything I did.

Somewhat surprisingly, the “best-fitting” model according to model comparison is the one with all of the interactions (I’ve marked parameters with \(t\) > 2 with an asterisk in the table below):

Parameter Estimate Std..Error t.value
(Intercept) 0.02 0.03 0.71
phasepost 0.02 0.01 1.54
conditionDR 0.03 0.03 0.89
overpar -0.17 0.03 -4.77 *
medSkept -0.48 0.03 -14.91 *
diseaseSevere 0.39 0.03 12.14 *
phasepost:conditionDR 0.03 0.01 2.61 *
phasepost:overpar 0.02 0.01 1.39
conditionDR:overpar -0.02 0.03 -0.47
phasepost:medSkept 0.02 0.01 1.99
conditionDR:medSkept 0.01 0.03 0.47
overpar:medSkept -0.01 0.03 -0.21
phasepost:diseaseSevere 0.00 0.01 0.36
conditionDR:diseaseSevere -0.05 0.03 -1.61
overpar:diseaseSevere 0.04 0.04 1.06
medSkept:diseaseSevere 0.09 0.03 3.23 *
phasepost:conditionDR:overpar 0.01 0.01 0.62
phasepost:conditionDR:medSkept 0.02 0.01 1.70
phasepost:overpar:medSkept 0.00 0.01 -0.09
conditionDR:overpar:medSkept 0.04 0.03 1.20
phasepost:conditionDR:diseaseSevere 0.01 0.01 0.59
phasepost:overpar:diseaseSevere -0.01 0.01 -0.67
conditionDR:overpar:diseaseSevere -0.04 0.04 -0.98
phasepost:medSkept:diseaseSevere 0.01 0.01 0.45
conditionDR:medSkept:diseaseSevere -0.07 0.03 -2.35 *
overpar:medSkept:diseaseSevere -0.06 0.03 -2.00 *
phasepost:conditionDR:overpar:medSkept 0.03 0.01 2.11 *
phasepost:conditionDR:overpar:diseaseSevere 0.00 0.01 -0.09
phasepost:conditionDR:medSkept:diseaseSevere 0.00 0.01 0.04
phasepost:overpar:medSkept:diseaseSevere 0.01 0.01 1.12
conditionDR:overpar:medSkept:diseaseSevere -0.07 0.03 -2.50 *
phasepost:conditionDR:overpar:medSkept:diseaseSevere -0.02 0.01 -1.46

I think the most interesting “significant” parameter here is:

  • phasepost:conditionDR:overpar:medSkept: A 4-way interaction betwen phase, condition, Overparenting at pre-test, and Medicial Skepticism at pre-test. Without thinking too deeply about this yet, I think this means that the intervention effect (the interaction between phase and condition) depended on pre-test scores for Overparenting and Medicial Skepticism. This is consistent with the observations we made looking at the second set of quantile splits, above.

Also interesting to think about (later):

  • conditionDR:medSkept:diseaseSevere: A 3-way interaction between condition, Medical Skepticism at pre-test, and Disease Severity at pre-test.
  • conditionDR:overpar:medSkept:diseaseSevere: A 4-way interaction between condition, Overparenting at pre-test, Medicial Skepticism at pre-test, and Disease Severity at pre-test.

Take-aways

This all suggests to me that it would be worth it to try including a node for the interaction between Overparenting and Medical Skepticism (and perhaps a node for the interaction between Overparenting and Disease Severity) in our cognitive model. We’ve come up with many (post-hoc) reasons why this might be important, and our data suggest that it was.

LS0tCnRpdGxlOiAnVmFjY2luZXM6IE1hbnkgQmVsaWVmcyBTdHVkeSAzOiBPdmVycGFyZW50aW5nIGRlZXAgZGl2ZScKYXV0aG9yOiAiS2FyYSBXZWlzbWFuLCBEZXJlayBQb3dlbGwiCmRhdGU6ICIyMDE4LTA1LTE4IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKYGBge3IsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogIC8vIFdoZW4gdGhlIGRvY3VtZW50IGlzIGZ1bGx5IHJlbmRlcmVkLi4uCiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAvLyAuLi5zZWxlY3QgYWxsIGhlYWRlciBlbGVtZW50cy4uLgogICAgJCgnaDEsIGgyLCBoMywgaDQsIGg1JykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgLy8gLi4uYW5kIGFkZCBhbiBpZCB0byB0aGVtIGNvcnJlc3BvbmRpbmcgdG8gdGhlaXIgJ3RpdGxlcycKICAgICAgJCh0aGlzKS5hdHRyKCdpZCcsICQodGhpcykuaHRtbCgpKTsKICAgIH0pOwogIH0pOwo8L3NjcmlwdD4KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkobG1lNCkKIyBsaWJyYXJ5KGJybXMpCmxpYnJhcnkocm1zKQpgYGAKClRoaXMgaXMgYSBkb2N1bWVudCB3aGVyZSB3ZSBkbyBhICJkZWVwIGRpdmUiIG9uIHRoZSAiT3ZlcnBhcmVudGluZyIgc2NhbGUsIHdoaWNoIGlzIG9uZSBvZiB0aGUgc2NhbGVzIHdlIGFyZSBsZWFzdCBhYmxlIHRvIHByZWRpY3QgbW92ZW1lbnQgaW4gYWZ0ZXIgdGhlIERpc2Vhc2UgUmlzayBpbnRlcnZlbnRpb24gLSBhbmQgYSBjYXNlIHRoYXQgd2UgdGhpbmsgbWlnaHQgYmUgaW52b2x2ZWQgbWVhbmluZ2Z1bCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzY2FsZXMgKGUuZy4sIERpc2Vhc2UgU2V2ZXJpdHksIE1lZGljYWwgU2tlcHRpY2lzbSkuCgpgYGB7ciB0aWR5LCBpbmNsdWRlID0gRn0KIyBsb2FkIGRhdGEKZF9hbGwgPC0gcmVhZC5jc3YoImRhdGEvc3R1ZHkzX2RhdGEuY3N2IilbLTFdCgojIHJlZm9ybWF0IHRvIG1hdGNoIHByZXZpb3VzIGFuYWx5c2VzIChpLmUuLCAyIHJvd3MgcGVyIHBhcnRpY2lwYW50KQpkX2RlbW8gPC0gZF9hbGwgJT4lIAogIHNlbGVjdCh3b3JrZXJJZCwgY29uZGl0aW9uLCBnZW5kZXIsIGFnZSwgZXRobmljaXR5LCBlZHVjYXRpb24sIGpvYiwgaW5jb21lLAogICAgICAgICBwb2xpdGljYWxfcGFydHksIHBvbGl0aWNhbF9iZWxpZWZzLCBlbGlnaWJsZV9wcmV0ZXN0LCAKICAgICAgICAgaXNfcGFyZW50X3Bvc3R0ZXN0LCBjaGlsZHJlbl9udW1fcG9zdHRlc3QsIGNoaWxkcmVuX29sZGVzdF9wb3N0dGVzdCwgCiAgICAgICAgIGNoaWxkcmVuX3lvdW5nZXN0X3Bvc3R0ZXN0LCBwbGFuX3BhcmVudF9wb3N0dGVzdCwKICAgICAgICAgc3RhcnRzX3dpdGgoImZsdXNob3RfIiksIHN0YXJ0c193aXRoKCJ2YXhfIiksIHN0YXJ0c193aXRoKCJhdHRlbnRpb25fIiksCiAgICAgICAgIHN0YXJ0c193aXRoKCJjb21tZW50cyIpLCBzdGFydHNfd2l0aCgiZHVyYXRpb24iKSkKZF9wcmUgPC0gZF9hbGwgJT4lIAogIHNlbGVjdCh3b3JrZXJJZCwgZW5kc193aXRoKCJfcHJldGVzdCIpKSAlPiUKICBzZWxlY3QoLWMoZWxpZ2libGVfcHJldGVzdCwgc3RhcnRzX3dpdGgoImZsdXNob3RfIiksIHN0YXJ0c193aXRoKCJ2YXhfIiksIAogICAgICAgICAgICBzdGFydHNfd2l0aCgiYXR0ZW50aW9uXyIpLCBzdGFydHNfd2l0aCgiY29tbWVudHMiKSwgCiAgICAgICAgICAgIHN0YXJ0c193aXRoKCJkdXJhdGlvbiIpKSkgJT4lCiAgcmVuYW1lX2FsbChmdW5zKGdzdWIoIl9wcmV0ZXN0IiwgIiIsIC4pKSkgJT4lCiAgbXV0YXRlKHBoYXNlID0gInByZSIpCmRfcG9zdCA8LSBkX2FsbCAlPiUgCiAgc2VsZWN0KHdvcmtlcklkLCBlbmRzX3dpdGgoIl9wb3N0dGVzdCIpKSAlPiUKICBzZWxlY3QoLWMoaXNfcGFyZW50X3Bvc3R0ZXN0LCBjaGlsZHJlbl9udW1fcG9zdHRlc3QsIGNoaWxkcmVuX29sZGVzdF9wb3N0dGVzdCwKICAgICAgICAgICAgY2hpbGRyZW5feW91bmdlc3RfcG9zdHRlc3QsIHBsYW5fcGFyZW50X3Bvc3R0ZXN0LAogICAgICAgICAgICBzdGFydHNfd2l0aCgiZmx1c2hvdF8iKSwgc3RhcnRzX3dpdGgoInZheF8iKSwgc3RhcnRzX3dpdGgoImF0dGVudGlvbl8iKSwKICAgICAgICAgICAgc3RhcnRzX3dpdGgoImNvbW1lbnRzIiksIHN0YXJ0c193aXRoKCJkdXJhdGlvbiIpKSkgJT4lCiAgcmVuYW1lX2FsbChmdW5zKGdzdWIoIl9wb3N0dGVzdCIsICIiLCAuKSkpICU+JQogIG11dGF0ZShwaGFzZSA9ICJwb3N0IikKCmQgPC0gYmluZF9yb3dzKGRfcHJlLCBkX3Bvc3QpICU+JSAKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyh3b3JrZXJJZCwgcGhhc2UpKSAlPiUKICBtdXRhdGUocGhhc2UgPSBmYWN0b3IocGhhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInByZSIsICJwb3N0IikpLAogICAgICAgICByZXZlcnNlX2NhdCA9IGlmZWxzZShncmVwbCgiX1sxLTldciQiLCBxdWVzdGlvbiksIFRSVUUsIEZBTFNFKSwKICAgICAgICAgIyBOT1RFOiAicmVzcG9uc2UiIGhhcyBhbHJlYWR5IGJlZW4gcmV2ZXJzZSBjb2RlZCEKICAgICAgICAgcXVlc3Rpb24gPSBmYWN0b3IocXVlc3Rpb24pLAogICAgICAgICBzY2FsZSA9IGZhY3Rvcihnc3ViKCJfLiokIiwgIiIsIHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidmFjY0ludGVudCIsICJ2YWNjRGFuZ2VyIiwgInZhY2NFZmYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFjY1N0cmFpbiIsICJ2YWNjVG94IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc2Vhc2VTZXZlcmUiLCAiZGlzZWFzZVJhcmUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mYW50SW1tTGltQ2FwIiwgImluZmFudEltbVdlYWsiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVkU2tlcHQiLCAiaGIiLCAibmF0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJwYXIiLCAicGFyZW50RXhwZXJ0IikpKSAlPiUKICBmdWxsX2pvaW4oZF9kZW1vKSAlPiUKICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGNvbmRpdGlvbiwgbGV2ZWxzID0gYygibm9JbnRlcnYiLCAiZGlzZWFzZVJpc2siKSkpICU+JQogIGZpbHRlcighaXMubmEocmVzcG9uc2UpLCAhaXMubmEod29ya2VySWQpLCAhaXMubmEoY29uZGl0aW9uKSkgJT4lCiAgZGlzdGluY3QoKQoKIyBob3cgbWFueSBsZWZ0PwojIGQgJT4lIGRpc3RpbmN0KHdvcmtlcklkLCBjb25kaXRpb24pICU+JSBjb3VudChjb25kaXRpb24pCmBgYAoKYGBge3Igc2NvcmVzLCBpbmNsdWRlID0gRn0KIyBzY29yZSBhbGwgc2NhbGVzCmRfc2NvcmVkIDwtIGQgJT4lCiAgc2VsZWN0KHdvcmtlcklkLCBjb25kaXRpb24sIHBoYXNlLCBzY2FsZSwgcmVzcG9uc2UsCiAgICAgICAgIGdlbmRlcjpkdXJhdGlvbl9wb3N0dGVzdCkgJT4lCiAgZ3JvdXBfYnkod29ya2VySWQsIGNvbmRpdGlvbiwgcGhhc2UsIHNjYWxlKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFRSVUUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZGlzdGluY3QoKQpgYGAKCiMgUmVsaWFiaWxpdHkKCkxldCdzIGxvb2sgYXQgdGhlIG9ic2VydmVkIHJlbGlhYmlsaXR5IG9mIHRoZSBPdmVycGFyZW50aW5nIHNjYWxlIGF0IHByZS10ZXN0OgoKYGBge3J9CmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoIm92ZXJwYXJfIikpICU+JSBhbHBoYSgpCmBgYAoKTm90IHNwZWN0YWN1bGFyLCBidXQgdGhlcmUgZG9uJ3QgYXBwZWFyIHRvIGJlIGl0ZW1zIHRoYXQgd291bGQgZHJhbWF0aWNhbGx5IGltcHJvdmUgaXQuCgpMZXQncyBsb29rIGF0IHRoZSBvYnNlcnZlZCByZWxpYWJpbGl0eSBvZiB0aGUgT3ZlcnBhcmVudGluZyBzY2FsZSBhdCBwb3N0LXRlc3Q6CgpgYGB7cn0KZF9wb3N0ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoIm92ZXJwYXJfIikpICU+JSBhbHBoYSgpCmBgYAoKQWdhaW4sIG5vdCBzcGVjdGFjdWxhciwgdGhvdWdoIHBlcmhhcHMgc2xpZ2h0bHkgYmV0dGVyIHRoYW4gYXQgcHJlLXRlc3Q7IG5vIG9idmlvdXMgaXRlbXMgdGhhdCBzaG91bGQgYmUgZHJvcHBlZC4KCkl0J3MgcG9zc2libGUgdGhhdCB0aGUgbG93ZXItdGhhbi1hdmVyYWdlIHJlbGlhYmlsaXR5IGZvciB0aGlzIHNjYWxlIGlzIG9uZSBvZiB0aGUgcmVhc29ucyBpdCdzIGhhcmRlciB0byBwcmVkaWN0IC0gaXQncyB0aGUgbG93ZXN0IHJlbGlhYmlsaXR5IG9mIGFsbCAxNCBzY2FsZXMgYXQgYm90aCBwcmUtIGFuZCBwb3N0LXRlc3QgKHRob3VnaCBub3QgZHJhbWF0aWNhbGx5IGxvd2VyIHRoYW4gdGhlIERpc2Vhc2UgUmFyaXR5IHNjYWxlIGF0IHByZS10ZXN0LCAkXGFscGhhJCA9IDAuNzUsIG9yIHRoZSBOYXR1cmFsaXNtIHNjYWxlIGF0IHBvc3QtdGVzdCwgJFxhbHBoYSQgPSAwLjc2KS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9wcmUgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgiaGJfIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3ByZSAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJuYXRfIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3ByZSAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJtZWRTa2VwdF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoImRpc2Vhc2VSYXJlXyIpKSAlPiUgc2VsZWN0KC1jb250YWlucygiY2hlY2siKSkgJT4lIGFscGhhKCkKZF9wcmUgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgiZGlzZWFzZVNldmVyZSIpKSAlPiUgc2VsZWN0KC1jb250YWlucygiY2hlY2siKSkgJT4lIGFscGhhKCkKZF9wcmUgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidmFjY0VmZl8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoInZhY2NEYW5nZXIiKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoInZhY2NUb3hfIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3ByZSAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJ2YWNjU3RyYWluXyIpKSAlPiUgc2VsZWN0KC1jb250YWlucygiY2hlY2siKSkgJT4lIGFscGhhKCkKZF9wcmUgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidmFjY0ludGVudF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoInBhcmVudEV4cGVydF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoImluZmFudEltbUxpbUNhcF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoImluZmFudEltbVdlYWsiKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcHJlICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoIm92ZXJwYXJfIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQoKZF9wb3N0ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoImhiXyIpKSAlPiUgc2VsZWN0KC1jb250YWlucygiY2hlY2siKSkgJT4lIGFscGhhKCkKZF9wb3N0ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoIm5hdF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcG9zdCAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJtZWRTa2VwdF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcG9zdCAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJkaXNlYXNlUmFyZV8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcG9zdCAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJkaXNlYXNlU2V2ZXJlIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3Bvc3QgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidmFjY0VmZl8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcG9zdCAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJ2YWNjRGFuZ2VyIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3Bvc3QgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidmFjY1RveF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcG9zdCAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJ2YWNjU3RyYWluXyIpKSAlPiUgc2VsZWN0KC1jb250YWlucygiY2hlY2siKSkgJT4lIGFscGhhKCkKZF9wb3N0ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoInZhY2NJbnRlbnRfIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3Bvc3QgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgicGFyZW50RXhwZXJ0XyIpKSAlPiUgc2VsZWN0KC1jb250YWlucygiY2hlY2siKSkgJT4lIGFscGhhKCkKZF9wb3N0ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoImluZmFudEltbUxpbUNhcF8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmRfcG9zdCAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCJpbmZhbnRJbW1XZWFrIikpICU+JSBzZWxlY3QoLWNvbnRhaW5zKCJjaGVjayIpKSAlPiUgYWxwaGEoKQpkX3Bvc3QgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgib3ZlcnBhcl8iKSkgJT4lIHNlbGVjdCgtY29udGFpbnMoImNoZWNrIikpICU+JSBhbHBoYSgpCmBgYAoKCiMgRGlzdHJpYnV0aW9ucyBvZiBzY29yZXMKCkxldCdzIGxvb2sgYXQgdGhlIG92ZXJhbGwgZGlzdHJpYnV0aW9uIG9mIHNjb3JlcyBvbiB0aGUgT3ZlcnBhcmVudGluZyBzY2FsZSwgYnkgY29uZGl0aW9uIGFuZCBwaGFzZToKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KZF9zY29yZWQgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJvdmVycGFyIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbWVhbiwgZmlsbCA9IGNvbmRpdGlvbikpICsKICBmYWNldF9ncmlkKHBoYXNlIH4gY29uZGl0aW9uKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIsIHBvc2l0aW9uID0gImlkZW50aXR5IikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIE92ZXJwYXJlbnRpbmcgc2NvcmVzIGJ5IHBoYXNlIGFuZCBjb25kaXRpb24iLAogICAgICAgeCA9ICJPdmVycGFyZW50aW5nIHNjb3JlIChyYW5nZTogLTMgdG8gKzMpIiwKICAgICAgIHkgPSAiTnVtYmVyIG9mIHBhcnRpY2lwYW50cyIsCiAgICAgICBmaWxsID0gIkNvbmRpdGlvbiIpCgojIGRfc2NvcmVkICU+JQojICAgZmlsdGVyKHNjYWxlID09ICJvdmVycGFyIikgJT4lCiMgICBnZ3Bsb3QoYWVzKHggPSBwaGFzZSwgY29sb3IgPSBjb25kaXRpb24sIHkgPSBtZWFuKSkgKwojICAgZmFjZXRfZ3JpZCh+IGNvbmRpdGlvbikgKwojICAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuNCwgaGVpZ2h0ID0gMCksIGFscGhhID0gMC41KSArCiMgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDEpKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiMgICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBvZiBPdmVycGFyZW50aW5nIHNjb3JlcyBieSBwaGFzZSBhbmQgY29uZGl0aW9uIiwKIyAgICAgICAgeCA9ICJQaGFzZSIsCiMgICAgICAgIHkgPSAiT3ZlcnBhcmVudGluZyBzY29yZSAocmFuZ2U6IC0zIHRvICszKSIsIAojICAgICAgICBmaWxsID0gIkNvbmRpdGlvbiIpCgpkX3Njb3JlZCAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gIm92ZXJwYXIiKSAlPiUKICBncm91cF9ieShjb25kaXRpb24sIHBoYXNlKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRtZWFuKSkpKSAlPiUgIyBib290c3RyYXBwZWQgOTUlIENJCiAgZ2dwbG90KGFlcyh4ID0gcGhhc2UsIHkgPSBNZWFuKSkgKwogIGZhY2V0X2dyaWQofiBjb25kaXRpb24pICsKICBnZW9tX3BvaW50KGRhdGEgPSBkX3Njb3JlZCAlPiUgCiAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAib3ZlcnBhciIpICU+JSAKICAgICAgICAgICAgICAgZGlzdGluY3Qod29ya2VySWQsIGNvbmRpdGlvbiwgcGhhc2UsIG1lYW4pLAogICAgICAgICAgICAgYWVzKHggPSBwaGFzZSwgeSA9IG1lYW4sIGNvbG9yID0gY29uZGl0aW9uKSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC40LCBoZWlnaHQgPSAwKSwgCiAgICAgICAgICAgICBhbHBoYSA9IDAuNSwgc2l6ZSA9IDAuOCkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAxKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb24gb2YgT3ZlcnBhcmVudGluZyBzY29yZXMgYnkgcGhhc2UgYW5kIGNvbmRpdGlvbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlBoYXNlIiwKICAgICAgIHkgPSAiT3ZlcnBhcmVudGluZyBzY29yZSAocmFuZ2U6IC0zIHRvICszKSIsIAogICAgICAgZmlsbCA9ICJDb25kaXRpb24iKQpgYGAKCkFuZCBhdCB0aGUgZGlmZmVyZW5jZSBzY29yZXM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmRfc2NvcmVkICU+JQogIGZpbHRlcihzY2FsZSA9PSAib3ZlcnBhciIpICU+JQogIHNwcmVhZChwaGFzZSwgbWVhbikgJT4lCiAgbXV0YXRlKGRpZmYgPSBwb3N0IC0gcHJlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBkaWZmLCBmaWxsID0gY29uZGl0aW9uKSkgKwogIGZhY2V0X2dyaWQofiBjb25kaXRpb24pICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDAuMikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIE92ZXJwYXJlbnRpbmcgZGlmZmVyZW5jZSBzY29yZXMgYnkgY29uZGl0aW9uIiwKICAgICAgIHggPSAiRGlmZmVyZW5jZSBzY29yZSIsCiAgICAgICB5ID0gIk51bWJlciBvZiBwYXJ0aWNpcGFudHMiLAogICAgICAgZmlsbCA9ICJDb25kaXRpb24iKQoKZF9zY29yZWQgJT4lIAogIGZpbHRlcihzY2FsZSA9PSAib3ZlcnBhciIpICU+JQogIHNwcmVhZChwaGFzZSwgbWVhbikgJT4lCiAgbXV0YXRlKGRpZmYgPSBwb3N0IC0gcHJlKSAlPiUKICBncm91cF9ieShjb25kaXRpb24pICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJGRpZmYpKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNvbmRpdGlvbiwgeSA9IE1lYW4pKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9zY29yZWQgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gIm92ZXJwYXIiKSAlPiUKICAgICAgICAgICAgICAgc3ByZWFkKHBoYXNlLCBtZWFuKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKGRpZmYgPSBwb3N0IC0gcHJlKSAlPiUKICAgICAgICAgICAgICAgZGlzdGluY3Qod29ya2VySWQsIGNvbmRpdGlvbiwgZGlmZiksCiAgICAgICAgICAgICBhZXMoeCA9IGNvbmRpdGlvbiwgeSA9IGRpZmYsIGNvbG9yID0gY29uZGl0aW9uKSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC40LCBoZWlnaHQgPSAwKSwgCiAgICAgICAgICAgICBhbHBoYSA9IDAuNSwgc2l6ZSA9IDAuOCkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIE92ZXJwYXJlbnRpbmcgZGlmZmVyZW5jZSBzY29yZXMgYnkgY29uZGl0aW9uIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIChvbiBkaWZmZXJlbmNlIHNjb3JlcykiLAogICAgICAgeCA9ICJQaGFzZSIsCiAgICAgICB5ID0gIkRpZmZlcmVuY2Ugc2NvcmUiLCAKICAgICAgIGZpbGwgPSAiQ29uZGl0aW9uIikgIApgYGAKCkxvb2tzIGxpa2UgbWVhbiBzY29yZXMgd2VyZSBhcm91bmQgdGhlIG1pZHBvaW50ICgwKSBhdCBwcmUtdGVzdCBpbiBib3RoIGNvbmRpdGlvbnMsIGFuZCBpbmNyZWFzZWQgYXQgcG9zdC10ZXN0IGFtb25nIHBhcnRpY2lwYW50cyBpbiB0aGUgRGlzZWFzZSBSaXNrIGNvbmRpdGlvbiAoYnV0IG5vdCB0aGUgTm8gSW50ZXJ2ZW50aW9uIGNvbmRpdGlvbikuIFRoaXMgaW5jcmVhc2UgaW4gdGhlIERpc2Vhc2UgUmlzayBjb25kaXRpb24gc2VlbXMgdG8gYmUgb24gdGhlIG9yZGVyIG9mIDAuMjUgcHRzIG9uIG91ciA3LXBvaW50IHNjYWxlLgoKIyBDb3JyZWxhdGlvbnMgd2l0aCBvdGhlciBzY2FsZXMKCkxldCdzIGxvb2sgYXQgdGhlIG9ic2VydmVkIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIHRoZSBPdmVycGFyZW50aW5nIHNjYWxlIGFuZCBvdGhlciBzY2FsZXM6CgpgYGB7ciwgZmlnLndpZHRoID0gOCwgZmlnLmFzcCA9IDF9CmRfc2NvcmVkICU+JQogIGZpbHRlcihwaGFzZSA9PSAicHJlIiwgY29uZGl0aW9uID09ICJub0ludGVydiIpICU+JQogIGRpc3RpbmN0KHdvcmtlcklkLCBzY2FsZSwgbWVhbikgJT4lCiAgc3ByZWFkKHNjYWxlLCBtZWFuKSAlPiUKICBzZWxlY3QoLXdvcmtlcklkKSAlPiUKICBjb3IoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzY2FsZUEiKSAlPiUKICBnYXRoZXIoc2NhbGVCLCBub0ludGVydl9wcmVfY29yLCAtc2NhbGVBKSAlPiUKICBmdWxsX2pvaW4oZF9zY29yZWQgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHBoYXNlID09ICJwb3N0IiwgY29uZGl0aW9uID09ICJub0ludGVydiIpICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHdvcmtlcklkLCBzY2FsZSwgbWVhbikgJT4lCiAgICAgICAgICAgICAgc3ByZWFkKHNjYWxlLCBtZWFuKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXdvcmtlcklkKSAlPiUKICAgICAgICAgICAgICBjb3IoKSAlPiUKICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzY2FsZUEiKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIoc2NhbGVCLCBub0ludGVydl9wb3N0X2NvciwgLXNjYWxlQSkpICU+JQogIGZ1bGxfam9pbihkX3Njb3JlZCAlPiUKICAgICAgICAgICAgICBmaWx0ZXIocGhhc2UgPT0gInByZSIsIGNvbmRpdGlvbiA9PSAiZGlzZWFzZVJpc2siKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdCh3b3JrZXJJZCwgc2NhbGUsIG1lYW4pICU+JQogICAgICAgICAgICAgIHNwcmVhZChzY2FsZSwgbWVhbikgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KC13b3JrZXJJZCkgJT4lCiAgICAgICAgICAgICAgY29yKCkgJT4lCiAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigic2NhbGVBIikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHNjYWxlQiwgZGlzZWFzZVJpc2tfcHJlX2NvciwgLXNjYWxlQSkpICU+JQogIGZ1bGxfam9pbihkX3Njb3JlZCAlPiUKICAgICAgICAgICAgICBmaWx0ZXIocGhhc2UgPT0gInBvc3QiLCBjb25kaXRpb24gPT0gImRpc2Vhc2VSaXNrIikgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qod29ya2VySWQsIHNjYWxlLCBtZWFuKSAlPiUKICAgICAgICAgICAgICBzcHJlYWQoc2NhbGUsIG1lYW4pICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtd29ya2VySWQpICU+JQogICAgICAgICAgICAgIGNvcigpICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInNjYWxlQSIpICU+JQogICAgICAgICAgICAgIGdhdGhlcihzY2FsZUIsIGRpc2Vhc2VSaXNrX3Bvc3RfY29yLCAtc2NhbGVBKSkgJT4lCiAgZ2F0aGVyKGdyb3VwLCBjb3IsIC1jKHNjYWxlQSwgc2NhbGVCKSkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGdzdWIoIl8uKiQiLCAiIiwgZ3JvdXApLAogICAgICAgICBwaGFzZSA9IGdzdWIoIl4uKl9wIiwgInAiLCBnc3ViKCJfY29yIiwgIiIsIGdyb3VwKSkpICU+JQogIHNlbGVjdCgtZ3JvdXApICU+JQogIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoY29uZGl0aW9uLCBsZXZlbHMgPSBjKCJub0ludGVydiIsICJkaXNlYXNlUmlzayIpKSwKICAgICAgICAgcGhhc2UgPSBmYWN0b3IocGhhc2UsIGxldmVscyA9IGMoInByZSIsICJwb3N0IikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY2FsZUEsIHkgPSBzY2FsZUIsIGZpbGwgPSBjb3IsCiAgICAgICAgICAgICBsYWJlbCA9IGZvcm1hdChyb3VuZChjb3IsIDIpLCBkaWdpdHMgPSAyKSkpICsKICBmYWNldF9ncmlkKHBoYXNlIH4gY29uZGl0aW9uKSArCiAgZ2VvbV90aWxlKCkgKwogIGdlb21fdGV4dCgpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAwLjUsIHhtYXggPSAxNC41LCB5bWluID0gNy41LCB5bWF4ID0gOC41LAogICAgICAgICAgIGFscGhhID0gMCwgc2l6ZSA9IDEsIGNvbG9yID0gImJsYWNrIikgKwogIGFubm90YXRlKCJyZWN0IiwgeW1pbiA9IDAuNSwgeW1heCA9IDE0LjUsIHhtaW4gPSA3LjUsIHhtYXggPSA4LjUsCiAgICAgICAgICAgYWxwaGEgPSAwLCBzaXplID0gMSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDMwKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSkpICsKICBjb29yZF9lcXVhbCgpICsKICBsYWJzKHRpdGxlID0gIkNvcnJlbGF0aW9ucyBiZXR3ZWVuIHNjYWxlcywgYnkgcGhhc2UgYW5kIGNvbmRpdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICJSIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmRfc2NvcmVkICU+JQogIGZpbHRlcihwaGFzZSA9PSAicHJlIiwgY29uZGl0aW9uID09ICJub0ludGVydiIpICU+JQogIGRpc3RpbmN0KHdvcmtlcklkLCBzY2FsZSwgbWVhbikgJT4lCiAgc3ByZWFkKHNjYWxlLCBtZWFuKSAlPiUKICBzZWxlY3QoLXdvcmtlcklkKSAlPiUKICBjb3IoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzY2FsZUEiKSAlPiUKICBnYXRoZXIoc2NhbGVCLCBub0ludGVydl9wcmVfY29yLCAtc2NhbGVBKSAlPiUKICBmdWxsX2pvaW4oZF9zY29yZWQgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHBoYXNlID09ICJwb3N0IiwgY29uZGl0aW9uID09ICJub0ludGVydiIpICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHdvcmtlcklkLCBzY2FsZSwgbWVhbikgJT4lCiAgICAgICAgICAgICAgc3ByZWFkKHNjYWxlLCBtZWFuKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXdvcmtlcklkKSAlPiUKICAgICAgICAgICAgICBjb3IoKSAlPiUKICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzY2FsZUEiKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIoc2NhbGVCLCBub0ludGVydl9wb3N0X2NvciwgLXNjYWxlQSkpICU+JQogIGZ1bGxfam9pbihkX3Njb3JlZCAlPiUKICAgICAgICAgICAgICBmaWx0ZXIocGhhc2UgPT0gInByZSIsIGNvbmRpdGlvbiA9PSAiZGlzZWFzZVJpc2siKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdCh3b3JrZXJJZCwgc2NhbGUsIG1lYW4pICU+JQogICAgICAgICAgICAgIHNwcmVhZChzY2FsZSwgbWVhbikgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KC13b3JrZXJJZCkgJT4lCiAgICAgICAgICAgICAgY29yKCkgJT4lCiAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigic2NhbGVBIikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHNjYWxlQiwgZGlzZWFzZVJpc2tfcHJlX2NvciwgLXNjYWxlQSkpICU+JQogIGZ1bGxfam9pbihkX3Njb3JlZCAlPiUKICAgICAgICAgICAgICBmaWx0ZXIocGhhc2UgPT0gInBvc3QiLCBjb25kaXRpb24gPT0gImRpc2Vhc2VSaXNrIikgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qod29ya2VySWQsIHNjYWxlLCBtZWFuKSAlPiUKICAgICAgICAgICAgICBzcHJlYWQoc2NhbGUsIG1lYW4pICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtd29ya2VySWQpICU+JQogICAgICAgICAgICAgIGNvcigpICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInNjYWxlQSIpICU+JQogICAgICAgICAgICAgIGdhdGhlcihzY2FsZUIsIGRpc2Vhc2VSaXNrX3Bvc3RfY29yLCAtc2NhbGVBKSkgJT4lCiAgZ2F0aGVyKGdyb3VwLCBjb3IsIC1jKHNjYWxlQSwgc2NhbGVCKSkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGdzdWIoIl8uKiQiLCAiIiwgZ3JvdXApLAogICAgICAgICBwaGFzZSA9IGdzdWIoIl4uKl9wIiwgInAiLCBnc3ViKCJfY29yIiwgIiIsIGdyb3VwKSksCiAgICAgICAgIHNjYWxlX3BhaXIgPSBwYXN0ZShzY2FsZUEsIHNjYWxlQiwgc2VwID0gIl8iKSkgJT4lCiAgc2VsZWN0KC1ncm91cCkgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sIGxldmVscyA9IGMoIm5vSW50ZXJ2IiwgImRpc2Vhc2VSaXNrIikpLAogICAgICAgICBwaGFzZSA9IGZhY3RvcihwaGFzZSwgbGV2ZWxzID0gYygicHJlIiwgInBvc3QiKSkpICU+JQogIGZpbHRlcihzY2FsZUEgPT0gIm92ZXJwYXIiLCBzY2FsZUIgIT0gIm92ZXJwYXIiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwaGFzZSwgeSA9IGNvciwgY29sb3IgPSBzY2FsZV9wYWlyLCBncm91cCA9IHNjYWxlX3BhaXIpKSArCiAgZmFjZXRfZ3JpZCguIH4gY29uZGl0aW9uKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fcG9pbnQoKSArCiAgZGlyZWN0bGFiZWxzOjpnZW9tX2RsKGFlcyhsYWJlbCA9IHNjYWxlX3BhaXIpLAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBsaXN0KCJsYXN0LnFwIikpICsgIywgY2V4ID0gMC44KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9ICJDaGFuZ2VzIGluIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIHNjYWxlcywgYnkgY29uZGl0aW9uIiwKICAgICAgIHggPSAiUGhhc2UiLCB5ID0gIlIiLCBjb2xvciA9ICJQYWlyIG9mIHNjYWxlcyIpCmBgYAoKQXQgcHJlLXRlc3QsIG5vbmUgb2YgdGhlIG90aGVyIHNjYWxlcyB3YXMgc3Ryb25neSBjb3JyZWxhdGVkIHdpdGggT3ZlcnBhcmVudGluZyBhbW9uZyBwYXJ0aWNpcGFudHMgaW4gZWl0aGVyIGNvbmRpdGlvbjsgdGhlIHN0cm9uZ2VzdCB3ZXJlIHRoZSB0d28gaW5mYW50IGltbXVuZSBzeXN0ZW0gYmVsaWVmcyBzY2FsZXMgKElJUzogTGltaXRlZCBDYXBhY2l0eSBhbmQgSUlTOiBXZWFrKS4gCgpJbiB0aGUgTm8gSW50ZXZlbnRpb24gY29uZGl0aW9uLCB0aGVzZSBjb3JyZWxhdGlvbnMgc2VlbSB0byBoYXZlIGluY3JlYXNlZCBhdCBwb3N0LXRlc3QgcmVsYXRpdmUgdG8gcHJlLXRlc3Q7IHRoaXMgZGlkbid0IGhhcHBlbiBpbiB0aGUgRGlzZWFzZSBSaXNrIGNvbmRpdGlvbi4gVGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gT3ZlcnBhcmVudGluZyBhbmQgTWVkaWNhbCBTa2VwdGljaXNtIGFsc28gc2VlbXMgdG8gaGF2ZSBpbmNyZWFzZWQgaW4gdGhpcyBjb25kaXRpb24gZnJvbSBwcmUtIHRvIHBvc3QtdGVzdCBpbiB0aGUgTm8gSW50ZXJ2ZW50aW9uIGNvbmRpdGlvbi4KCkluIHRoZSBEaXNlYXNlIFJpc2sgY29uZGl0aW9uLCBhIGhhbmRmdWwgb2YgY29ycmVsYXRpb25zIHNlZW0gdG8gaGF2ZSAqZGVjcmVhc2VkKiBmcm9tIHByZS0gdG8gcG9zdC10ZXN0LCBtb3N0IG5vdGFibHkgYWxsIHRoZSBjb3JyZWxhdGlvbnMgd2l0aCB2YWNjaW5lIGJlbGllZnMsIGFzIHdlbGwgYXMgdGhlIGNvcnJlbGF0aW9uIHdpdGggTWVkaWNhbCBTa2VwdGljaXNtLiBNZWFud2hpbGUsIGEgZGlmZmVyZW50IHNldCBvZiBjb3JyZWxhdGlvbnMgc2VlbSB0byBoYXZlICppbmNyZWFzZWQqIGZyb20gcHJlLSB0byBwb3N0LXRlc3QsIGluY2x1ZGluZyBjb3JyZWxhdGlvbnMgd2l0aCBEaXNlYXNlIFNldmVyaXR5ICh0aGUgdGFyZ2V0IG9mIHRoZSBpbnRlcnZlbnRpb24pLCBWYWNjaW5lIEludGVudGlvbiAodGhlIG91dGNvbWUgb2YgaW50ZXJlc3QpLCBhbmQgVmFjY2luZSBFZmZpY2FjeS4KClNvIGl0IHNlZW1zIGxpa2UganVzdCBmaWxsaW5nIG91dCB0aGVzZSBzY2FsZXMgdHdpY2UgbWlnaHQgaGF2ZSBtYWRlIHBhcnRpY2lwYW50cyBhbGlnbiB0aGVpciBiZWxpZWZzIGFib3V0IGluZmFudCBpbW11bmUgc3lzdGVtcyB3aXRoIHRoZWlyIGF0dGl0dWRlcyB0b3dhcmQgcHJvdGVjdGl2ZSBwYXJlbnRpbmcgKGF0IGxlYXN0IGluIHRoZSBObyBJbnRlcnZlbnRpb24gY29uZGl0aW9uKSAtIGJ1dCBpbiBhZGRpdGlvbiB0byB0aGlzLCB0aGUgaW50ZXJ2ZW50aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFydGljaXBhbnRzJyBiZWxpZWZzIGFib3V0IHZhY2NpbmVzIGFuZCB0aGVpciBhdHRpdHVkZXMgdG93YXJkIHByb3RlY3RpdmUgcGFydGVudGluZy4gSW4gcGFydGljdWxhciwgYXQgcHJlLXRlc3QsIHBhcnRpY2lwYW50cyB3aG8gbW9yZSBzdHJvbmdseSBlbmRvcnNlZCB3aGF0IHdlJ3JlIGNhbGxpbmcgIm92ZXJwYXJlbnRpbmciIGFsc28gdGVuZGVkIHRvIHRoaW5rIHZhY2NpbmVzIHdlcmUgbW9yZSBkYW5nZXJvdXMsIGxlc3MgZWZmZWN0aXZlLCBtb3JlIG9mIGEgc3RyYWluIG9uIHRoZSBpbmZhbnQgaW1tdW5lIHN5c3RlbSwgYW5kIG1vcmUgbGlrZWx5IHRvIGNvbnRhaW4gdG94aW5zLCBhbmQgd2VyZSBnZW5lcmFsbHkgbG93ZXIgb24gb3VyIFZhY2NpbmUgSW50ZW50IHNjYWxlLiBCdXQgYXQgcG9zdC10ZXN0LCB0aGVzZSByZWxhdGlvbnNoaXBzIG5vIGxvbmdlciBoZWxkIC0gYWxsIG9mIHRoZXNlIGNvcnJlbGF0aW9ucyB3ZXJlIHByZXR0eSBjbG9zZSB0byAwLgoKKE5vdGUgdGhhdCB0aGlzIHdheSBvZiB0aGlua2luZyBhYm91dCB0aGluZ3MgaXMgYXQgb2RkcyB3aXRoIG91ciB1c2Ugb2YgdGhlIHNhbWUgY29nbml0aXZlIG1vZGVsIGNvbm5lY3RpbmcgYWxsIG9mIHRoZXNlIGJlbGllZnMgLSBJIG5lZWQgdG8gdGhpbmsgaGFyZGVyIGFib3V0IHRoaXMuKSAKCiMgUXVhbnRpbGUgc3BsaXRzCgpMZXQncyBzcGxpdCBwZW9wbGUgaW50byBncm91cHMgYnkgdGhlaXIgc2NvcmVzIG9uIHRoZSBPdmVycGFyZW50aW5nLCBNZWRpY2FsIFNrZXB0aWNpc20sIGFuZCBEaXNlYXNlIFNldmVyaXR5IHNjb3Jlcywgc2luY2UgdGhlc2Ugd2VyZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgdGhhdCB3ZSBpZGVudGlmaWVkIGluIHBlcnNvbi4gKE5vdGUgdGhhdCB3ZSBjb3VsZCBhbHNvIHVzZSBvdXIgaW52ZXN0aWdhdGlvbnMgb2YgdGhlIGNoYW5naW5nIGNvcnJlbGF0aW9ucyBhbW9uZyBzY2FsZXMgdG8gZG8gZnVydGhlciBpbnZlc3RpZ2F0aW9ucyBsaWtlIHRoaXMuLi4pCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnNwbGl0IDwtIGRfc2NvcmVkICU+JQogIGZpbHRlcihzY2FsZSAlaW4lIGMoIm92ZXJwYXIiLCAibWVkU2tlcHQiLCAiZGlzZWFzZVNldmVyZSIpLCBwaGFzZSA9PSAicHJlIikgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIG11dGF0ZShzcGxpdCA9IG50aWxlKG1lYW4sIDMpLAogICAgICAgICBzcGxpdCA9IGZhY3RvcihzcGxpdCwgbGFiZWxzID0gYygibG93IiwgIm1pZCIsICJoaWdoIikpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KHdvcmtlcklkLCBjb25kaXRpb24sIHNjYWxlLCBzcGxpdCkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzcGxpdCkgJT4lCiAgZnVsbF9qb2luKGRfc2NvcmVkICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInZhY2NJbnRlbnQiKSAlPiUgCiAgICAgICAgICAgICAgZGlzdGluY3Qod29ya2VySWQsIHBoYXNlLCBtZWFuKSkgJT4lCiAgbXV0YXRlKG92ZXJwYXIgPSBmYWN0b3IocGFzdGUoIk92ZXJwYXJlbnRpbmc6IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKG92ZXJwYXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJPdmVycGFyZW50aW5nOiBsb3ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk92ZXJwYXJlbnRpbmc6IG1pZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3ZlcnBhcmVudGluZzogaGlnaCIpKSwKICAgICAgICAgZGlzZWFzZVNldmVyZSA9IGZhY3RvcihwYXN0ZSgiRGlzZWFzZSBTZXZlcml0eToiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIoZGlzZWFzZVNldmVyZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkRpc2Vhc2UgU2V2ZXJpdHk6IGxvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlzZWFzZSBTZXZlcml0eTogbWlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaXNlYXNlIFNldmVyaXR5OiBoaWdoIikpLAogICAgICAgICBtZWRTa2VwdCA9IGZhY3RvcihwYXN0ZSgiTWVkaWNhbCBTa2VwdGljaXNtOiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihtZWRTa2VwdCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJNZWRpY2FsIFNrZXB0aWNpc206IGxvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lZGljYWwgU2tlcHRpY2lzbTogbWlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVkaWNhbCBTa2VwdGljaXNtOiBoaWdoIikpKSAlPiUKICBzcHJlYWQocGhhc2UsIG1lYW4pICU+JQogIG11dGF0ZShkaWZmID0gcG9zdCAtIHByZSkKYGBgCgojIyBPdmVycGFyZW50aW5nIGFuZCBEaXNlYXNlIFNldmVyaXR5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CnNwbGl0ICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgb3ZlcnBhciwgZGlzZWFzZVNldmVyZSkgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kZGlmZikpKSkgJT4lICMgYm9vdHN0cmFwcGVkIDk1JSBDSQogIGdncGxvdChhZXMoeCA9IGNvbmRpdGlvbiwgeSA9IE1lYW4sIGNvbG9yID0gY29uZGl0aW9uKSkgKwogICMgZmFjZXRfZ3JpZChvdmVycGFyIH4gZGlzZWFzZVNldmVyZSB+IG1lZFNrZXB0KSArCiAgZmFjZXRfZ3JpZChkaXNlYXNlU2V2ZXJlIH4gb3ZlcnBhcikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBzcGxpdCwgYWVzKHkgPSBkaWZmKSwKICAgICAgICAgICAgIGFscGhhID0gMC41LCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuNCwgaGVpZ2h0ID0gMCkpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSwgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiQ2hhbmdlcyBpbiBWYWNjaW5lIEludGVudGlvbnMiLAogICAgICAgc3VidGl0bGUgPSAiQnkgY29uZGl0aW9uLCBPdmVycGFyZW50aW5nIHF1YW50aWxlIGF0IHByZS10ZXN0LCBhbmQgRGlzZWFzZSBTZXZlcml0eSBxdWFudGlsZSBhdCBwcmUtdGVzdFxuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJDb25kaXRpb24iLCB5ID0gIlZhY2NpbmUgSW50ZW50aW9ucyBkaWZmZXJlbmNlIHNjb3JlIiwgCiAgICAgICBjb2xvciA9ICJDb25kaXRpb24iKQpgYGAKCldoYXQgSSBoYWQgd3JpdHRlbiBkb3duIGluIG91ciBub3RlcyBmcm9tIG91ciBtZWV0aW5nIG9uIDIwMTgtMDUtMTUgd2FzIHRoYXQgdGhlIERpc2Vhc2UgUmlzayBpbnRlcnZlbnRpb24gbWlnaHQgYmUgbW9zdCBlZmZlY3RpdmUgZm9yIHBhcnRpY2lwYW50cyB3aG8gd2VyZSBoaWdoIGluIE92ZXJwYXJlbnRpbmcgYW5kIGxvdyBvciBtb2RlcmF0ZSBvbiBEaXNlYXNlIFNldmVyaXR5LiBUaGlzIGRvZXMgc2VlbSB0byBiZSB0aGUgY2FzZSAtIHRoZXNlIGFyZSB0aGUgdG9wIGFuZCBtaWRkbGUgcm93cyBmb3IgdGhlIHJpZ2h0LW1vc3QgY29sdW1uLiAKCkludGVyZXN0aW5nbHksIHRoaXMgcGxvdCByZXZlYWxzIHRoYXQgdGhlIGludGVydmVudGlvbiBnZW5lcmFsbHkgZGlkbid0IHdvcmsgZm9yIHBhcnRpY2lwYW50cyB3aG8gc3RhcnRlZCBvdXQgYXMgbG93IGluIE92ZXJwYXJlbnRpbmcgKGxlZnQtbW9zdCBjb2x1bW4pIC0gdGhpcyBpcyBnb29kIHRvIGtub3cuLi4gbm90IHN1cmUgeWV0IHdoYXQgdG8gbWFrZSBvZiBpdCEgCgpBcyB3ZSdkIHByZWRpY3QsIHRoZSBpbnRlcnZlbnRpb24gZGlkbid0IGRvIG11Y2ggZm9yIHBhcnRpY2lwYW50cyB3aG8gc3RhcnRlZCBvdXQgYXMgaGlnaCBpbiBEaXNlYXNlIFNldmVyaXR5IChib3R0b20gcm93KS4KCiMjIE92ZXJwYXJlbnRpbmcgYW5kIE1lZGljYWwgU2tlcHRpY2lzbQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpzcGxpdCAlPiUKICBncm91cF9ieShjb25kaXRpb24sIG92ZXJwYXIsIG1lZFNrZXB0KSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRkaWZmKSkpKSAlPiUgIyBib290c3RyYXBwZWQgOTUlIENJCiAgZ2dwbG90KGFlcyh4ID0gY29uZGl0aW9uLCB5ID0gTWVhbiwgY29sb3IgPSBjb25kaXRpb24pKSArCiAgIyBmYWNldF9ncmlkKG92ZXJwYXIgfiBkaXNlYXNlU2V2ZXJlIH4gbWVkU2tlcHQpICsKICBmYWNldF9ncmlkKG1lZFNrZXB0IH4gb3ZlcnBhcikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBzcGxpdCwgYWVzKHkgPSBkaWZmKSwKICAgICAgICAgICAgIGFscGhhID0gMC41LCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuNCwgaGVpZ2h0ID0gMCkpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSwgY29sb3IgPSAiYmxhY2siKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiQ2hhbmdlcyBpbiBWYWNjaW5lIEludGVudGlvbnMiLAogICAgICAgc3VidGl0bGUgPSAiQnkgY29uZGl0aW9uLCBPdmVycGFyZW50aW5nIHF1YW50aWxlIGF0IHByZS10ZXN0LCBhbmQgTWVkaWNhbCBTa2VwdGljaXNtIHF1YW50aWxlIGF0IHByZS10ZXN0XG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIkNvbmRpdGlvbiIsIHkgPSAiVmFjY2luZSBJbnRlbnRpb25zIGRpZmZlcmVuY2Ugc2NvcmUiLCAKICAgICAgIGNvbG9yID0gIkNvbmRpdGlvbiIpCmBgYAoKSSBhbHNvIGhhZCB3cml0dGVuIGRvd24gaW4gb3VyIG5vdGVzIHRoYXQgdGhlIERpc2Vhc2UgUmlzayBpbnRlcnZlbnRpb24gbWlnaHQgYmUgbW9zdCBlZmZlY3RpdmUgZm9yIHBhcnRpY2lwYW50cyB3aG8gd2VyZSBoaWdoIGluIE92ZXJwYXJlbnRpbmcgYW5kIGhpZ2ggaW4gTWVkaWNpYWwgU2tlcHRpY2lzbS4gQWdhaW4sIHRoaXMgZG9lcyBzZWVtIHRvIGJlIHRoZSBjYXNlIC0gdGhpcyB3b3VsZCBiZSB0aGUgYm90dG9tIHJpZ2h0IHBhbmVsLgoKTm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIG1pZ2h0IGp1c3QgYmUgYSBtYWluIGVmZmVjdCBvZiBNZWRpY2FsIFNrZXB0aWNpc206IFBhcnRpY2lwYW50cyB3aG8gc3RhcnRlZCBvdXQgaGlnaCBpbiBNZWRpY2FsIFNrZXB0aWNpc20gKGJvdHRvbSByb3cpIHNlZW0gdG8gaGF2ZSBiZWVuIHBhcnRpY3VsYXJseSBzZW5zaXRpdmUgdG8gdGhlIGludGVydmVudGlvbiwgcGVyaGFwcyByZWdhcmRsZXNzIG9mIHRoZWlyIE92ZXJwYXJlbnRpbmcgc2NvcmVzLgoKSW50ZXJlc3RpbmdseSwgdGhpcyBwbG90IHJldmVhbHMgdGhhdCB0aGUgaW50ZXJ2ZW50aW9uIGdlbmVyYWxseSBkaWRuJ3Qgd29yayBmb3IgcGFydGljaXBhbnRzIHdobyBzdGFydGVkIG91dCBhcyBsb3cgaW4gTWVkaWNhbCBTa2VwdGljaXNtICh0b3Agcm93KSAtIGFnYWluLCB0aGlzIGlzIGdvb2QgdG8ga25vdywgdGhvdWdoIGFnYWluIG5vdCBzdXJlIHlldCB3aGF0IHRvIG1ha2Ugb2YgaXQhIAoKIyBNb2RlbGluZyBpbnRlcmFjdGlvbnMgdmlhIHJlZ3Jlc3Npb24KCkxldCdzIG1vZGVsIHRoZXNlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdmlhIHJlZ3Jlc3Npb24uIChBZ2Fpbiwgd2UgY291bGQgYWxzbyBkbyB0aGlzIGZvciBhbnkgb2YgdGhlIGFkZGl0aW9uYWwgcmVsYXRpb25zaGlwcyBvZiBpbnRlcmVzdCByZXZlYWxlZCBieSB0aGUgY2hhbmdlcyBpbiBjb3JyZWxhdGlvbnMsIGFib3ZlKS4KCkkgc3RhcnRlZCBvZmYgd2l0aCBteSBnby10byBtb2RlbCBvZiB0aGUgaW50ZXJ2ZW50aW9uLCBgc2NvcmUgfiBwaGFzZSAqIGNvbmRpdGlvbiArICgxfHN1YmplY3QpYCAod2l0aCBwaGFzZSBhbmQgY29uZGl0aW9uIGVmZmVjdC1jb2RlZCksIGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgYWx3YXlzIG1ha2VzIHNlbnNlIHRvIG1lLCBidXQgd2Ugc2hvdWxkIGNvbnNpZGVyIGRvaW5nIHRoaXMgd2l0aCBvdGhlciBtb2RlbHMgYXMgd2VsbC4KCk9uIHRoZSBpZGVhIHRoYXQgd2Ugd2VyZSBpbnRlcmVzdGVkIGluIHBvc3NpYmxlIGludGVyYWN0aW9ucyBpbnZvbHZpbmcgT3ZlcnBhcmVudGluZywgTWVkaWNpYWwgU2tlcHRpY2lzbSwgYW5kIERpc2Vhc2UgU2V2ZXJpdHkgaW4gcGFydGljdWxhciwgSSBjcmVhdGVkIGEgbmV3IGRhdGFmcmFtZSB3aXRoIHByZS10ZXN0IHNjb3JlcyBmb3IgT3ZlcnBhcmVudGluZywgTWVkaWNpYWwgU2tlcHRpY2lzbSwgYW5kIERpc2Vhc2UgU2V2ZXJpdHkgKGFsbCBtZWFuLWNlbnRlcmVkIGFuZCBzdGFuZGFyZGl6ZWQpLCBhbmQgYm90aCBwcmUtIGFuZCBwb3N0LXRlc3Qgc2NvcmVzIGZvciBWYWNjaW5lIEludGVudGlvbnMgKGFsc28gbWVhbi1jZW50ZXJlZCBhbmQgc3RhbmRhcmRpemVkKS4gSSB0aGluayBwcm9jZWVkZWQgdGhyb3VnaCBhIHNlcmllcyBvZiBtb2RlbHMgb2YgaW5jcmVhc2luZyBjb21wbGV4aXR5ICh0aG91Z2ggSSBrbm93IHRoaXMgaXNuJ3QgYSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgYXBwcm9hY2gpIC0gc2VlIHRoZSBjb2RlIGZvciBldmVyeXRoaW5nIEkgZGlkLgoKU29tZXdoYXQgc3VycHJpc2luZ2x5LCB0aGUgImJlc3QtZml0dGluZyIgbW9kZWwgYWNjb3JkaW5nIHRvIG1vZGVsIGNvbXBhcmlzb24gaXMgdGhlIG9uZSB3aXRoIGFsbCBvZiB0aGUgaW50ZXJhY3Rpb25zIChJJ3ZlIG1hcmtlZCBwYXJhbWV0ZXJzIHdpdGggJHQkID4gMiB3aXRoIGFuIGFzdGVyaXNrIGluIHRoZSB0YWJsZSBiZWxvdyk6CgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfc2NvcmVkX3dpZGUgPC0gZF9zY29yZWQgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJ2YWNjSW50ZW50IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMobWVhbiksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpICU+JSAKICBzcHJlYWQoc2NhbGUsIG1lYW4pICU+JQogIGZ1bGxfam9pbihkX3Njb3JlZCAlPiUKICAgICAgICAgICAgICBmaWx0ZXIocGhhc2UgPT0gInByZSIsIHNjYWxlICE9ICJ2YWNjSW50ZW50IikgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qod29ya2VySWQsIHNjYWxlLCBtZWFuKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShzY2FsZSkgJT4lCiAgICAgICAgICAgICAgbXV0YXRlX2F0KHZhcnMobWVhbiksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpICU+JSAjIG1lYW4tY2VudGVyICYgc3RhbmRhcmRpemUKICAgICAgICAgICAgICBzcHJlYWQoc2NhbGUsIG1lYW4pICU+JQogICAgICAgICAgICAgIHVuZ3JvdXAoKSkKCmNvbnRyYXN0cyhkX3Njb3JlZF93aWRlJHBoYXNlKSA8LSBjYmluZChwb3N0ID0gYygtMSwgMSkpCmNvbnRyYXN0cyhkX3Njb3JlZF93aWRlJGNvbmRpdGlvbikgPC0gY2JpbmQoRFIgPSBjKC0xLCAxKSkKCnIxIDwtIGxtZXIodmFjY0ludGVudCB+IHBoYXNlICogY29uZGl0aW9uICsgKDF8d29ya2VySWQpLCBkX3Njb3JlZF93aWRlKQojIHN1bW1hcnkocjEpCgpyMmEgPC0gbG1lcih2YWNjSW50ZW50IH4gcGhhc2UgKiBjb25kaXRpb24gKiBvdmVycGFyICsgCiAgICAgICAgICAgICAgKDF8d29ya2VySWQpLCBkX3Njb3JlZF93aWRlKQojIHN1bW1hcnkocjJhKQoKcjJiIDwtIGxtZXIodmFjY0ludGVudCB+IHBoYXNlICogY29uZGl0aW9uICogbWVkU2tlcHQgKyAKICAgICAgICAgICAgICAoMXx3b3JrZXJJZCksIGRfc2NvcmVkX3dpZGUpCiMgc3VtbWFyeShyMmIpCgpyMmMgPC0gbG1lcih2YWNjSW50ZW50IH4gcGhhc2UgKiBjb25kaXRpb24gKiBkaXNlYXNlU2V2ZXJlICsgCiAgICAgICAgICAgICAgKDF8d29ya2VySWQpLCBkX3Njb3JlZF93aWRlKQojIHN1bW1hcnkocjJjKQoKcjNhIDwtIGxtZXIodmFjY0ludGVudCB+IHBoYXNlICogY29uZGl0aW9uICogb3ZlcnBhciAqIG1lZFNrZXB0ICsgCiAgICAgICAgICAgICAgKDF8d29ya2VySWQpLCBkX3Njb3JlZF93aWRlKQojIHN1bW1hcnkocjNhKQoKcjNiIDwtIGxtZXIodmFjY0ludGVudCB+IHBoYXNlICogY29uZGl0aW9uICogb3ZlcnBhciAqIGRpc2Vhc2VTZXZlcmUgKyAKICAgICAgICAgICAgICAoMXx3b3JrZXJJZCksIGRfc2NvcmVkX3dpZGUpCiMgc3VtbWFyeShyM2IpCgpyNCA8LSBsbWVyKHZhY2NJbnRlbnQgfiBwaGFzZSAqIGNvbmRpdGlvbiAqIG92ZXJwYXIgKiBtZWRTa2VwdCAqIGRpc2Vhc2VTZXZlcmUgKyAKICAgICAgICAgICAgICAoMXx3b3JrZXJJZCksIGRfc2NvcmVkX3dpZGUpCiMgc3VtbWFyeShyNCkKCmFub3ZhKHIxLCByMmEsIHIzYSwgcjQpCmFub3ZhKHIxLCByMmEsIHIzYiwgcjQpCmBgYAoKYGBge3IsIGFzLmlzID0gVH0Kc3VtbWFyeShyNCkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oIlBhcmFtZXRlciIpICU+JQogIG11dGF0ZShgIGAgPSBpZmVsc2UoYWJzKHQudmFsdWUpID49IDIsICIqIiwgIiIpKSAlPiUKICBrbml0cjo6a2FibGUoZGlnaXRzID0gMikKYGBgCgpJIHRoaW5rIHRoZSBtb3N0IGludGVyZXN0aW5nICJzaWduaWZpY2FudCIgcGFyYW1ldGVyIGhlcmUgaXM6CgotIF9fYHBoYXNlcG9zdDpjb25kaXRpb25EUjpvdmVycGFyOm1lZFNrZXB0YDogQSA0LXdheSBpbnRlcmFjdGlvbiBiZXR3ZW4gcGhhc2UsIGNvbmRpdGlvbiwgT3ZlcnBhcmVudGluZyBhdCBwcmUtdGVzdCwgYW5kIE1lZGljaWFsIFNrZXB0aWNpc20gYXQgcHJlLXRlc3RfXy4gV2l0aG91dCB0aGlua2luZyB0b28gZGVlcGx5IGFib3V0IHRoaXMgeWV0LCBJIHRoaW5rIHRoaXMgbWVhbnMgdGhhdCB0aGUgaW50ZXJ2ZW50aW9uIGVmZmVjdCAodGhlIGludGVyYWN0aW9uIGJldHdlZW4gcGhhc2UgYW5kIGNvbmRpdGlvbikgZGVwZW5kZWQgb24gcHJlLXRlc3Qgc2NvcmVzIGZvciBPdmVycGFyZW50aW5nIGFuZCBNZWRpY2lhbCBTa2VwdGljaXNtLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zIHdlIG1hZGUgbG9va2luZyBhdCB0aGUgc2Vjb25kIHNldCBvZiBxdWFudGlsZSBzcGxpdHMsIDxhIGhyZWY9IiNPdmVycGFyZW50aW5nIGFuZCBNZWRpY2FsIFNrZXB0aWNpc20iPmFib3ZlPC9hPi4KCkFsc28gaW50ZXJlc3RpbmcgdG8gdGhpbmsgYWJvdXQgKGxhdGVyKToKCi0gYGNvbmRpdGlvbkRSOm1lZFNrZXB0OmRpc2Vhc2VTZXZlcmVgOiBBIDMtd2F5IGludGVyYWN0aW9uIGJldHdlZW4gY29uZGl0aW9uLCBNZWRpY2FsIFNrZXB0aWNpc20gYXQgcHJlLXRlc3QsIGFuZCBEaXNlYXNlIFNldmVyaXR5IGF0IHByZS10ZXN0LgotIGBjb25kaXRpb25EUjpvdmVycGFyOm1lZFNrZXB0OmRpc2Vhc2VTZXZlcmVgOiBBIDQtd2F5IGludGVyYWN0aW9uIGJldHdlZW4gY29uZGl0aW9uLCBPdmVycGFyZW50aW5nIGF0IHByZS10ZXN0LCBNZWRpY2lhbCBTa2VwdGljaXNtIGF0IHByZS10ZXN0LCBhbmQgRGlzZWFzZSBTZXZlcml0eSBhdCBwcmUtdGVzdC4KCgojIFRha2UtYXdheXMKClRoaXMgYWxsIHN1Z2dlc3RzIHRvIG1lIHRoYXQgaXQgd291bGQgYmUgd29ydGggaXQgdG8gdHJ5IGluY2x1ZGluZyBhIG5vZGUgZm9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIE92ZXJwYXJlbnRpbmcgYW5kIE1lZGljYWwgU2tlcHRpY2lzbSAoYW5kIHBlcmhhcHMgYSBub2RlIGZvciB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBPdmVycGFyZW50aW5nIGFuZCBEaXNlYXNlIFNldmVyaXR5KSBpbiBvdXIgY29nbml0aXZlIG1vZGVsLiBXZSd2ZSBjb21lIHVwIHdpdGggbWFueSAocG9zdC1ob2MpIHJlYXNvbnMgd2h5IHRoaXMgbWlnaHQgYmUgaW1wb3J0YW50LCBhbmQgb3VyIGRhdGEgc3VnZ2VzdCB0aGF0IGl0IHdhcy4=